热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

范围内|间隔时间_selenium强制等待,隐式等待,显式等待

篇首语:本文由编程笔记#小编为大家整理,主要介绍了selenium强制等待,隐式等待,显式等待相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了selenium强制等待,隐式等待,显式等待相关的知识,希望对你有一定的参考价值。



在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait()、隐式等待implicitly_wait()、强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别


强制等待

sleep(): 强制等待,设置固定休眠时间。脚本的执行过程中执行 sleep()后线程休眠。


隐式等待

implicitly_wait():隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。

# 导包-selenium
from selenium import webdriver
# 导入时间包
from time import sleep
# 实例化对象-火狐浏览器
driver=webdriver.Firefox()
# 调用隐式等待
driver.implicitly_wait(10)
url="E:\\\\双元\\\\Web自动化\\\\02_其他资料\\\\注册A.html"
# 打开url
driver.get(url)
driver.find_element_by_css_selector("#userA").send_keys("admin")
driver.find_element_by_css_selector("#passwordA").send_keys("123456")
sleep(3)
# 关闭浏览器
driver.quit()


显式等待

WebDriverWait():显式等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

实现步骤

1. 导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait
2. 导包 判断条件 --> from selenium.webdriver.support import expected_conditions as EC (将expected_conditions 通过as关键字起个别名:EC)
3. WebDriverWait(driver, timeout, poll_frequency=0.5)
1). driver:浏览器对象
2). timeout:超时的时长,单位:秒
3). poll_frequency:检测间隔时间,默认为0.5
4. 调用方法 until(method):直到..
1). method:调用EC.presence_of_element_located(element)element:调用By类方法进行定位

# 导包-selenium
from selenium import webdriver
# 导入显示等待类
from selenium.webdriver.support.wait import WebDriverWait
# 导入预期条件类 as 关键字起个别名为:EC
from selenium.webdriver.support import expected_conditions as EC
# 导入By类
from selenium.webdriver.common.by import By
# 导入时间包
from time import sleep
# 实例化对象-火狐浏览器
driver=webdriver.Firefox()
url="E:\\\\双元\\\\Web自动化\\\\02_其他资料\\\\注册A.html"
# 打开url
driver.get(url)
element=WebDriverWait(driver,30).until(EC.presence_of_element_located((By.ID,userA)))
element.send_keys("admin")
sleep(3)
# 关闭浏览器
driver.quit()

显示等待的第二种调用方式
可以使用lambda表达式,如

WebDriverWait(driver,30).until(lambda x:x.find_element_by_id("kw")).send_keys("yoyo")
#以下代码同理
element=WebDriverWait(driver,30).until(lambda x:x.find_element_by_id("kw"))
element.send_keys("yoyo")

【selenium】强制等待,隐式等待,显式等待_导包
这里的lambda表达式还可以这样写

def get_element(self, by, locator):
"""
find alone element
:param by: eg: id, name, xpath, css.....
:param locator: id, name, xpath for str
:return: element object
"""
try:
print([Info:Starting find the element "" by ""!].format(locator, by))
element = WD(self.driver, self.outTime).until(lambda x: x.find_element(by, locator)) #注意这里的find_element是selemium的内置方法
except TimeoutException as t:
print(error: found "" timeout!.format(locator), t)
else:
return element

重点看这行代码

element = WD(self.driver, self.outTime).until(lambda x: x.find_element(by, locator))

通过看until的源码,我们发现匿名函数lambda传了webdriver对象进去

def until(self, method, message=):
"""Calls the method provided with the driver as an argument until the \\
return value is not False."""
screen = None
stacktrace = None
end_time = time.time() + self._timeout
while True:
try:
value = method(self._driver) #发现匿名函数传参driver
if value:return value
except self._ignored_exceptions as exc:
screen = getattr(exc, screen, None)
stacktrace = getattr(exc, stacktrace, None)
time.sleep(self._poll)
if time.time() > end_time:
break
raise TimeoutException(message, screen, stacktrace)

关于lambda表达式的使用说明

# 普通函数定义和调用
def f(x):
return x**2
var cpro_id = "u6885494";

推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
醒来时t我尚年少你未老
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有